package Collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * JDK5之后推出了一个新的特性:增强型for循环,也称为新循环.
 * 新循环可以使用相同的语法遍历集合或数组.
 * 语法:
 * for(元素类型 e : 集合或数组){
 *
 * }
 */
public class NewForDemo {
    public static void main(String[] args) {
        String[] array = {"one","two","three","four","five"};
        for(int i=0;i<array.length;i++){
            String str = array[i];
            System.out.println(str);
        }

        for(String s : array){
            System.out.println(s);
        }

        /*
            JDK5之后java支持了另一个特性:泛型.
            泛型也称为参数化类型,允许我们在使用一个类时指定该类某个属性
            或方法参数或返回值的类型,使得我们使用更方便.
            泛型在集合中被广泛使用,用于规定集合中的元素类型.
         */
        //使用泛型规定当前集合的元素类型为String
        Collection<String> c = new ArrayList<>();
        c.add("一");//编译器会检查传入的实参是否为String
        c.add("二");
        c.add("三");
        c.add("四");
        c.add("五");
//        c.add(123);//编译不通过,实参不符合泛型要求
        System.out.println(c);
        //集合指定泛型后,获取集合元素时无需造型.

        /*
        * 编译器会将新循环遍历集合改为迭代器遍历,因此同样要注意,在遍历的过程中不要通过集合的方法增删元素,否则会抛出异常.
        *
        * 集合指定泛型后,获取集合元素时无需造型
        * */
        for(String s : c){
            System.out.println(s);
        }

    Iterator<String> it = c.iterator();
        while (it.hasNext()){
            String e = it.next();
            System.out.println(e);
        }
    }
}
